package com.stars.module.grant.service;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.stars.base.entity.CommonDTO;
import com.stars.module.grant.entity.StarGrant;

import java.util.List;

/**
 * @author : moon
 * @version : 1.0
 * @date : 2023/03/22
 * @description : 权限相关服务接口
 */
public interface StarGrantService extends IService<StarGrant> {

    /**
     * 获取权限下角色列表数据
     * @author : moon
     * @date :  2023/3/28 18:29
     * @param: dto 查询条件
     * @param: targetType 授权类型GrantEnum1用户2角色
     * @return: com.alibaba.fastjson2.JSONObject
     */
    JSONObject loadGrantTargetList(CommonDTO dto, String targetType);

    /**
     * 根据来源id和授权类型获取权限数据
     * @author : moon
     * @date :  2023/7/17 9:30
     * @param: fid
     * @param: targetType
     * @return: java.util.List<com.stars.module.grant.entity.StarGrant>
     */
    List<StarGrant> getGrantData(String fid, Integer targetType);

    /**
     * 保存授权信息（先删除后增）
     * @author : moon
     * @date :  2023/7/17 9:31
     * @param: sourceId 源id
     * @param: targetType 授权类型GrantEnum1用户2角色
     * @param: list 授权信息
     * @return: boolean
     */
    boolean saveGrant(String sourceId, String targetType, List<StarGrant> list);

    /**
     * 使用id删除权限数据（物理删除）
     * @author : moon
     * @date :  2023/7/17 9:31
     * @param: id
     * @return: boolean
     */
    boolean deleteGrantDataById(String id);

    /**
     * 校验角色下是否有有效其他授权
     * @author : Rocks
     * @date :  2023/7/15 23:37
     * @param roleId 角色ID
     * @return boolean
     */
    boolean checkRoleGrant(String roleId);

    /**
     * 加载指定用户全部角色信息
     * @author : Rocks
     * @date :  2023/7/15 23:45
     * @param userId 用户ID
     * @return String
     */
    String loadUserRoles(String userId);

    /**
     * 加载指定用户全部权限信息
     * @author : Rocks
     * @date :  2023/7/15 23:46
     * @param userId 用户ID
     * @return String
     */
    String loadUserPrivileges(String userId);

}
